home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio / Ham Radio CD-ROM (Emerald Software) (1995).ISO / misc / duper / duper.bas
Encoding:
BASIC Source File  |  1987-03-15  |  17.0 KB  |  447 lines

  1.  
  2. 790 REM        ***  QSO DUPE CHECKING AND SORTING PROGRAM ***
  3. 800 REM
  4. 810 REM       COPYRIGHT (C) 1985 BY GEORGE ALLISON, K5IJ
  5. 820 REM
  6. 830 REM      Released to the public domain by the author
  7. 840 REM
  8. 850 REM    THIS PROGRAM IS PROVIDED ON AN `AS IS' BASIS, WITHOUT
  9. 860 REM    WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT
  10. 870 REM    NOT LIMITED TO THE IMPLIED WARRANTY OF FITNESS FOR A
  11. 880 REM    PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
  12. 890 REM    PERFORMANCE OF THIS PROGRAM IS WITH YOU.  SHOULD THE PROGRAM
  13. 900 REM    PROVE DEFECTIVE, YOU (NOT K5IJ) ASSUME THE ENTIRE COST OF
  14. 910 REM    NECESSARY REPAIR, SERVICING, OR CORRECTION.  IN NO CASE WILL
  15. 920 REM    K5IJ BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING INCIDENTAL
  16. 930 REM    OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY
  17. 940 REM    TO USE THIS PROGRAM, EVEN IF K5IJ HAS BEEN ADVISED OF THE
  18. 950 REM    POSSIBILITY OF SUCH DAMAGES.
  19. 960 REM
  20. 970 REM      This program can accept a maximum of 500 calls.  For
  21. 980 REM   information on how to increase this number, see QST.
  22. 990 REM
  23. 1000 DIM Q$(500,7),P$(500),SE$(74)    'INITIALIZE MATRICES
  24. 1010 GOTO 3540                         'JUMP TO START
  25. 1020 REM  *** ALL-CAPS SUBROUTINE ***
  26. 1030 IF D=1 THEN V=LEN(Q$(C,D)) ELSE V=3
  27. 1040 FOR I=1 TO V
  28. 1050 H$=MID$(Q$(C,D),I,1)
  29. 1060 IF H$ > "z" OR H$ < "a" THEN GOTO 1080
  30. 1070 MID$(Q$(C,D),I,1)=CHR$(ASC(H$)-32)
  31. 1080 NEXT I
  32. 1090 RETURN
  33. 1100 REM *** DATE, TIME AND BAND SUBROUTINE ***
  34. 1110 Q$(C,7)=BA$                              'CURRENT BAND
  35. 1120 Q$(C,2)=LEFT$(DATE$,6)+RIGHT$(DATE$,2)   'LAST TWO DIGITS OF YEAR
  36. 1130 Q$(C,3)=LEFT$(TIME$,5)                   'HOURS AND MINUTES ONLY
  37. 1140 LOCATE 15,1
  38. 1150 FOR I = 1 TO 8
  39. 1160 PRINT STRING$(70," ")
  40. 1170 NEXT I
  41. 1180 LOCATE 15,3
  42. 1190 PRINT "HIS RST   MY RST   COMMENT"
  43. 1200 PRINT "  -------   ------   -------"
  44. 1210 LOCATE 17,3
  45. 1220 INPUT">",Q$(C,4)
  46. 1230 LOCATE 17,13
  47. 1240 INPUT">",Q$(C,5)
  48. 1250 LOCATE 17,22
  49. 1260 INPUT">",Q$(C,6)
  50. 1270 PRINT:PRINT "   HIT `C' TO CORRECT, ANY KEY TO CONTINUE";
  51. 1280 AN$ = INPUT$(1)
  52. 1290 IF (AN$="C" OR AN$="c") THEN GOTO 1140
  53. 1300 REM *** SECTION CHECKER ***
  54. 1310 D = 6              ' INDEX FOR CAPS CORRECTION
  55. 1320 GOSUB 1020
  56. 1330 D = 1              ' RESET CORRECTION
  57. 1340 IF SW$ <> "Y" THEN GOTO 1440
  58. 1350 FOR I=0 TO (N-1)
  59. 1360 IF SE$(I) <> LEFT$(Q$(C,6)+" ",3) THEN GOTO 1430
  60. 1370 N=N-1          ' REDUCE SECTION MATRIX
  61. 1380 SF = 1    'SET SECTION CHANGE FLAG
  62. 1390 FOR J=I TO (N-1)
  63. 1400 SE$(J) = SE$(J+1)
  64. 1410 NEXT J
  65. 1420 RETURN         ' BREAK EARLY IF MATCH
  66. 1430 NEXT I
  67. 1440 RETURN
  68. 1450 REM *** DISK SAVE SUBROUTINE ***
  69. 1460 PRINT:PRINT "  PUT DATA DISK IN DRIVE B AND HIT ANY KEY WHEN READY"
  70. 1470 X$=INPUT$(1)
  71. 1480 LOCATE 20,45:PRINT"       . . . Saving"
  72. 1490 OPEN "O", #1, "B:LOG.DAT"
  73. 1500 IF SW$ <> "Y" THEN GOTO 1550
  74. 1510 PRINT #1,N
  75. 1520 FOR I=0 TO N-1
  76. 1530 WRITE #1,SE$(I)      'SAVE SWEEPSTAKES INFO
  77. 1540 NEXT I
  78. 1550 FOR I=0 TO C-1
  79. 1560 FOR J=1 TO 7
  80. 1570 WRITE #1, Q$(I,J)
  81. 1580 NEXT J
  82. 1590 NEXT I
  83. 1600 CLOSE
  84. 1610 LOCATE 20,45:PRINT TAB(65)
  85. 1620 RETURN
  86. 1630 REM *** DELETION SUBROUTINE ***
  87. 1640 LOCATE 15,3:PRINT TAB(40)
  88. 1650 LOCATE 15,3:INPUT "CALLSIGN TO DELETE: ",Q$(C,1)
  89. 1660 IF Q$(C,1) = "" THEN GOTO 1640
  90. 1670 GOSUB 1020
  91. 1680 LOCATE 17,3:INPUT "WHAT BAND? (CR IF BAND NOT IMPORTANT) ",B$
  92. 1690 IF B$ > " " THEN GOTO 1770
  93. 1700 FOR I=0 TO C-1       'FIND THE CALLSIGN
  94. 1710 IF Q$(I,1) = Q$(C,1) THEN GOTO 1850
  95. 1720 NEXT I
  96. 1730 LOCATE 19,3
  97. 1740 PRINT "CALLSIGN ";Q$(C,1);" NOT FOUND.  PRESS ANY KEY TO RESUME"
  98. 1750 X$=INPUT$(1)
  99. 1760 GOTO 4300
  100. 1770 FOR I=0 TO C-1
  101. 1780 IF Q$(I,1) = Q$(C,1) AND B$ = Q$(I,7) THEN GOTO 1850
  102. 1790 NEXT I
  103. 1800 LOCATE 19,3
  104. 1810 PRINT "CALLSIGN ";Q$(C,1);" NOT FOUND ON ";B$;" METERS";
  105. 1820 PRINT "  PRESS ANY KEY TO RESUME"
  106. 1830 X$=INPUT$(1)
  107. 1840 GOTO 4390
  108. 1850 LOCATE 19,3
  109. 1860 PRINT "ARE YOU SURE YOU WANT TO DELETE ";Q$(I,1);" ? (Y/N) ";
  110. 1870 AN$ = INPUT$(1)
  111. 1880 IF AN$="N" OR AN$="n" THEN GOTO 4390
  112. 1890 IF AN$ <> "Y" AND AN$ <> "y" THEN GOTO 1850
  113. 1900 LOCATE 19,55:PRINT". . . Deleting"
  114. 1910 IF SW$ <> "Y" THEN GOTO 1940
  115. 1920 T$ = LEFT$(Q$(I,6),3)         'SAVE SECTION
  116. 1930 IF LEN(T$) < 3 THEN T$ = T$ + " "
  117. 1940 FOR K=I TO C-1                'DELETE CALLSIGN AND INFO
  118. 1950 FOR J=1 TO 7
  119. 1960 Q$(K,J) = Q$(K+1,J)
  120. 1970 NEXT J
  121. 1980 NEXT K
  122. 1990 SE$(N) = "Z"
  123. 2000 C=C-1
  124. 2010 IF SW$ <> "Y" THEN GOTO 2280
  125. 2020 FOR I=0 TO 73          'DETERMINE IF SECTION IS VALID
  126. 2030 READ SN$
  127. 2040 IF T$ = 1
  128. 2050 NEXT I
  129. 2060 RESTORE
  130. 2070 IF C = 0 THEN GOTO 4100   'RESTART IF NO CONTACTS
  131. 2080 GOTO 4390     'COMPLETE LOOP IF NOT VALID
  132. 2090 FOR I=0 TO C            'DETERMINE IF SECTION WAS WORKED
  133. 2100 IF T$ = LEFT$(LEFT$(Q$(I,6)+" ",3),3) THEN GOTO 4390  'WAS WORKED
  134. 2110 NEXT I
  135. 2120 N=N+1
  136. 2130 IF N=1 THEN GOTO 2190
  137. 2140 IF T$ > SE$(N-1) THEN SE$(N-1)=T$:GOTO 2280
  138. 2150 IF T$ > SE$(0) THEN GOTO 2210
  139. 2160 FOR I=N-1 TO 1 STEP -1
  140. 2170 SE$(I) = SE$(I-1)
  141. 2180 NEXT I
  142. 2190 SE$(0) = T$
  143. 2200 GOTO 2280
  144. 2210 FOR I=0 TO N-2
  145. 2220 IF T$ > SE$(I) AND T$ < SE$(I+1) THEN GOTO 2240
  146. 2230 NEXT I
  147. 2240 FOR J=N-1 TO I+1 STEP -1
  148. 2250 SE$(J) = SE$(J-1)
  149. 2260 NEXT J
  150. 2270 SE$(I+1) = T$
  151. 2280 IF C=O THEN GOTO 4100
  152. 2290 GOTO 4290
  153. 2300 REM *** HEADER SUBROUTINE ***
  154. 2310 PRINT "STATION";TAB(13);"BAND";TAB(21);"DATE";TAB(29);"TIME";TAB(36);
  155. 2320 PRINT "HIS RST";TAB(45);"MY RST";TAB(53);"COMMENT"
  156. 2330 PRINT "----------";TAB(13);"----";TAB(19);"--------";TAB(29);"-----";
  157. 2340 PRINT TAB(36);"-------";TAB(45);"------";TAB(53);"---------------"
  158. 2350 RETURN
  159. 2360 REM *** PRINT SUBROUTINE ***
  160. 2370 PRINT Q$(I,1);TAB(14);Q$(I,7);TAB(19);Q$(I,2);TAB(29);Q$(I,3);
  161. 2380 PRINT TAB(38);Q$(I,4);TAB(46);Q$(I,5);TAB(53);Q$(I,6)
  162. 2390 RETURN
  163. 2400 REM *** BUBBLE SORT ***
  164. 2410 PRINT:PRINT:PRINT:PRINT " ","   . . . Sorting"
  165. 2420 LOCATE 20,35:PRINT "PASS ="
  166. 2430 FOR J=0 TO C-1             'REARRANGE CALL FOR PROPER SORTING
  167. 2440 IF Q$(J,7)="160" THEN Q$(J,7)="99"     'SORTING CORRECTION
  168. 2450 IF LEFT$(Q$(J,1),1) < ":" THEN P$(J)=Q$(J,7)+Q$(J,1):GOTO 2490
  169. 2460 IF MID$(Q$(J,1),2,1) > ":" THEN GOTO 2480
  170. 2470 P$(J)=Q$(J,7)+Q$(J,1) + "." :GOTO 2490
  171. 2480 P$(J)=Q$(J,7)+LEFT$(Q$(J,1),1)+MID$(Q$(J,1),3,1)+MID$(Q$(J,1),4,9)+MID$(Q$(J,1),2,1)
  172. 2490 IF Q$(J,7)="99" THEN Q$(J,7)="160"
  173. 2500 NEXT J
  174. 2510 K=0                         'PASS COUNTER
  175. 2520 F=1                         'SORTING FLAG
  176. 2530 K=K+1
  177. 2540 LOCATE 20,41:PRINT TAB(45)
  178. 2550 LOCATE 20,41:PRINT K
  179. 2560 FOR I=0 TO (C-2)
  180. 2570 IF P$(I) < P$(I+1) THEN GOTO 2630
  181. 2580 SWAP P$(I),P$(I+1)
  182. 2590 FOR J=1 TO 7
  183. 2600 SWAP Q$(I,J),Q$(I+1,J)
  184. 2610 NEXT J
  185. 2620 F=0                      'SET FLAG IF ANOTHER PASS REQUIRED
  186. 2630 NEXT I
  187. 2640 IF F=0 THEN GOTO 2520
  188. 2650 REM *** DISPLAY SUBROUTINE ***
  189. 2660 CLS:PRINT:PRINT:PRINT
  190. 2670 PRINT " ","Stations worked as of ";TIME$;" on ";DATE$:PRINT:PRINT
  191. 2680 GOSUB 2300
  192. 2690 FOR I=0 TO C-1
  193. 2700 GOSUB 2360
  194. 2710 IF Q$(I,7) <> Q$(I+1,7) THEN PRINT
  195. 2720 NEXT I
  196. 2730 PRINT:PRINT " ","  TOTAL STATIONS = ";C
  197. 2740 REM *** PRINTING SUBROUTINE ***
  198. 2750 PRINT:PRINT:PRINT"  DO YOU WANT A HARD COPY PRINTOUT? (Y/N) ";
  199. 2760 AN$ = INPUT$(1):PRINT AN$
  200. 2770 IF AN$="N"OR AN$="n" THEN GOTO 4250
  201. 2780 IF AN$<>"Y" AND AN$<>"y" THEN GOTO 2750
  202. 2790 PRINT:PRINT"  CHECK PRINTER IS ON AND PRESS ANY KEY TO START"
  203. 2800 X$=INPUT$(1)
  204. 2810 LPRINT " ","         * * * * * * * * * * * * *"
  205. 2820 LPRINT " ","           S U P ' R   D U P ' R  "
  206. 2830 LPRINT " ","         * * * * * * * * * * * * *":LPRINT:LPRINT
  207. 2840 LPRINT " ","     Copyright 1985 K5IJ Sup'r Software":LPRINT:LPRINT
  208. 2850 LPRINT " ","Stations worked as of ";TIME$;" on ";DATE$
  209. 2860 H=44:K=44                   'LINES ON FIRST PAGE
  210. 2870 FOR I=0 TO C-1
  211. 2880 IF (H/K-INT(H/K)) > .000001 THEN GOTO 2950   'HEADER/FEED CONTROL
  212. 2890 REM  *** PAGE HEADER SUBROUTINE ***
  213. 2900 IF I=0 THEN GOTO 2930     'FIRST PAGE ONLY
  214. 2910 H=55:K=55                 'INITIALIZE NUMBER OF LINES ON PAGE
  215. 2920 LPRINT:LPRINT:LPRINT" "," ","   PAGE ";PA:LPRINT CHR$(12)
  216. 2930 GOSUB 3010
  217. 2940 PA=PA+1
  218. 2950 GOSUB 3090
  219. 2960 IF Q$(I,7) <> Q$(I+1,7) THEN H=H-1:LPRINT   'BAND SEPARATION
  220. 2970 NEXT I
  221. 2980 LPRINT:LPRINT " "," ","TOTAL STATIONS =";C
  222. 2990 LPRINT CHR$(12)             'FORMFEED
  223. 3000 GOTO 4250
  224. 3010 REM *** PRINTING HEADER SUBROUTINE ***
  225. 3020 LPRINT:LPRINT:LPRINT "STATION";TAB(13);"BAND";TAB(21);"DATE";
  226. 3030 LPRINT TAB(29);"TIME";TAB(36);"HIS RST";TAB(45);"MY RST";
  227. 3040 LPRINT TAB(53);"COMMENT"
  228. 3050 LPRINT "----------";TAB(13);"----";TAB(19);"--------";TAB(29);
  229. 3060 LPRINT "-----";TAB(36);"-------";TAB(45);"------";
  230. 3070 LPRINT TAB(53);"---------------"
  231. 3080 RETURN
  232. 3090 REM *** PRINTER SUBROUTINE ***
  233. 3100 LPRINT Q$(I,1);TAB(14);Q$(I,7);TAB(19);Q$(I,2);TAB(29);Q$(I,3);
  234. 3110 LPRINT TAB(38);Q$(I,4);TAB(46);Q$(I,5);TAB(53);Q$(I,6)
  235. 3120 RETURN
  236. 3130 REM *** PICK SUBROUTINE ***
  237. 3140 FL=0               'COMMENT FLAG
  238. 3150 LOCATE 15,3:PRINT TAB(40)
  239. 3160 LOCATE 15,3:INPUT "FIELD TO SELECT (X TO EXIT): ",Q$(C,1)
  240. 3170 GOSUB 1020
  241. 3180 SL$=Q$(C,1)         'SL$ IS SAVED FOR HEADER DISPLAY
  242. 3190 IF Q$(C,1)="STATION" THEN PI=1:GOTO 3280       'Q$(C,1) IS A
  243. 3200 IF Q$(C,1)="BAND" THEN PI=7:GOTO 3280          'DUMMY VARIABLE
  244. 3210 IF Q$(C,1)="DATE" THEN PI=2:GOTO 3280          'SO THE ALL-CAPS
  245. 3220 IF Q$(C,1)="TIME" THEN PI=3:GOTO 3280          'SUBROUTINE WILL
  246. 3230 IF Q$(C,1)="HIS RST" THEN PI=4:GOTO 3280       'WORK
  247. 3240 IF Q$(C,1)="MY RST" THEN PI=5:GOTO 3280
  248. 3250 IF Q$(C,1)="COMMENT" THEN FL=1:GOTO 3280
  249. 3260 IF Q$(C,1)="X" THEN GOTO 4390
  250. 3270 PRINT "  NO SUCH FIELD, TRY AGAIN":GOTO 3150
  251. 3280 PRINT:INPUT"  VALUE TO SELECT: ",Q$(C,1)
  252. 3290 GOSUB 1020
  253. 3300 L=LEN(Q$(C,1))
  254. 3310 CLS
  255. 3320 PRINT:PRINT " ","SELECTION FOR ";SL$;" = ";Q$(C,1):PRINT
  256. 3330 GOSUB 2300
  257. 3340 FOR I=0 TO (C-1)
  258. 3350 IF FL=0 THEN SO$=Q$(I,PI) ELSE SO$=LEFT$(Q$(I,6),L)
  259. 3360 IF SO$ <> Q$(C,1) THEN GOTO 3380
  260. 3370 GOSUB 2360
  261. 3380 NEXT I
  262. 3390 PRINT:PRINT"   SELECTION COMPLETE. DO YOU WANT A HARD COPY? (Y/N) ";
  263. 3400 AN$ = INPUT$(1):PRINT AN$
  264. 3410 IF AN$="N" OR AN$="n" THEN GOTO 4250
  265. 3420 IF AN$<>"Y" AND AN$<>"y" THEN GOTO 3390
  266. 3430 PRINT:PRINT"   CHECK PRINTER IS ON AND PRESS ANY KEY TO START"
  267. 3440 X$=INPUT$(1)
  268. 3450 LPRINT:LPRINT " ","SELECTION FOR ";SL$;" = ";Q$(C,1)
  269. 3460 GOSUB 3010
  270. 3470 FOR I=0 TO (C-1)
  271. 3480 IF FL=0 THEN SO$=Q$(I,PI) ELSE SO$=LEFT$(Q$(I,6),L)
  272. 3490 IF SO$ <> Q$(C,1) THEN GOTO 3510
  273. 3500 GOSUB 3090
  274. 3510 NEXT I
  275. 3520 LPRINT:LPRINT:LPRINT
  276. 3530 GOTO 4250
  277. 3540 REM *** START PROGRAM ***
  278. 3550 C=0
  279. 3560 FR = FRE(0)/100
  280. 3570 N=74
  281. 3580 PA=0                         'PAGE NUMBER
  282. 3590 D=1
  283. 3600 CLS
  284. 3610 KEY OFF                      'TURN OFF FUNCTION KEY PROMPTS
  285. 3620 PRINT:PRINT:PRINT
  286. 3630 PRINT " "," ","* * * * * * * * * * * * *"
  287. 3640 PRINT " "," ","  S U P ' R   D U P ' R  "
  288. 3650 PRINT " "," ","* * * * * * * * * * * * *":PRINT:PRINT
  289. 3660 PRINT " ","       Copyright (C) 1985 K5IJ Sup'r Software":PRINT:PRINT
  290. 3670 LOCATE 11,3:PRINT TAB(50)
  291. 3680 LOCATE 11,3:PRINT "IS THIS THE SWEEPSTAKES? (Y/N) ";
  292. 3690 SW$ = INPUT$(1):PRINT SW$
  293. 3700 IF SW$ = "y" THEN SW$ = "Y"
  294. 3710 IF SW$ = "N" OR SW$ = "n" THEN GOTO 3730
  295. 3720 IF SW$ <> "Y" AND SW$ <> "N" AND SW$ <> "n" THEN GOTO 3670
  296. 3730 LOCATE 13,3:PRINT TAB(65):LOCATE 13,3
  297. 3740 PRINT "DO YOU WANT ALL-BAND OR SINGLE-BAND DUPE CHECKING? (A/S) ";
  298. 3750 SA$ = INPUT$(1):PRINT SA$
  299. 3760 IF SA$="s" THEN SA$="S"
  300. 3770 IF SA$ <> "S" AND SA$ <> "a" AND SA$ <> "A" THEN GOTO 3730
  301. 3780 LOCATE 15,3:PRINT TAB(40):LOCATE 15,3
  302. 3790 PRINT "DO YOU WANT AUTO-SAVE? (Y/N) ";
  303. 3800 SV$ = INPUT$(1):PRINT SV$
  304. 3810 IF SV$ = "y" THEN SV$ = "Y"
  305. 3820 IF SV$ <> "N" AND SV$ <> "n" AND SV$ <> "Y" THEN GOTO 3780
  306. 3830 LOCATE 17,3:PRINT TAB(50):LOCATE 17,3
  307. 3840 PRINT "IS THERE A DISK FILE TO INPUT? (Y/N) ";
  308. 3850 AN$ = INPUT$(1):PRINT AN$:PRINT:PRINT
  309. 3860 IF AN$="N" OR AN$="n" THEN GOTO 4050
  310. 3870 IF AN$<>"Y" AND AN$<>"y" THEN GOTO 3830
  311. 3880 PRINT "  PUT DISK WITH FILE <LOG.DAT> IN DRIVE B AND PRESS ANY KEY"
  312. 3890 X$=INPUT$(1)
  313. 3900 PRINT:PRINT"          . . . Loading"
  314. 3910 OPEN "I", #1, "B:LOG.DAT"
  315. 3920 IF SW$ <> "Y" THEN GOTO 3970
  316. 3930 INPUT #1,N
  317. 3940 FOR I=0 TO N-1
  318. 3950 INPUT #1,SE$(I)      'LOAD SWEEPSTAKES INFO INTO MEMORY
  319. 3960 NEXT I
  320. 3970 IF EOF(1) THEN GOTO 4020
  321. 3980 FOR J=1 TO 7
  322. 3990 INPUT #1, Q$(C,J)        'LOAD DISK FILE INTO MEMORY
  323. 4000 NEXT J
  324. 4010 C=C+1:GOTO 3970
  325. 4020 CLOSE
  326. 4030 BA$=Q$(C-1,7)
  327. 4040 IF C<>0 THEN GOTO 4250      'CHECK FOR FIRST CALL
  328. 4050 IF SW$ <> "Y" THEN GOTO 4100
  329. 4060 FOR I=0 TO N-1
  330. 4070 READ SE$(I)
  331. 4080 NEXT I
  332. 4090 RESTORE
  333. 4100 CLS
  334. 4110 LOCATE 9,3:PRINT TAB(40)
  335. 4120 LOCATE 9,3:INPUT "  ENTER BAND: ",BA$
  336. 4130 IF BA$ = "" THEN GOTO 4110
  337. 4140 IF BA$<>"10" AND BA$<>"15" AND BA$<>"20" AND BA$<>"30"  AND BA$<>"40"  AND BA$<>"80" AND BA$<>"160" THEN PRINT "  ";BA$;"  IS NOT A VALID BAND":GOTO 4110
  338. 4150 LOCATE 10,1:PRINT TAB(40):LOCATE 12,3:PRINT TAB(40)
  339. 4160 LOCATE 12,3:INPUT "  ENTER FIRST CALL: ",Q$(C,1)
  340. 4170 IF Q$(C,1) = "" THEN GOTO 4150
  341. 4180 IF LEN(Q$(C,1)) < 12 THEN GOTO 4210
  342. 4190 PRINT:PRINT "  CALLSIGN TOO LONG, TRY AGAIN"
  343. 4200 GOTO 4150
  344. 4210 GOSUB 1020
  345. 4220 IF VAL(Q$(C,1)) > 9 THEN GOTO 4100    'JUMP TO START IF BAND ENTERED
  346. 4230 GOSUB 1100
  347. 4240 C=1
  348. 4250 CLS:PRINT
  349. 4260 PRINT "  Dele  Pick  SAve  SOrt  View  Quit";TAB(43);
  350. 4270 PRINT "BANDS:  10  15  20  30  40  80  160"
  351. 4280 PRINT STRING$(79,"-")
  352. 4290 IF SW$ <> "Y" THEN GOTO 4430
  353. 4300 LOCATE 4,1
  354. 4310 PRINT " "," ","SECTIONS NOT WORKED = ";N
  355. 4320 IF N=0 THEN PRINT TAB(34) "CLEAN SWEEP!!!":GOTO 4370
  356. 4330 FOR I=0 TO N-1
  357. 4340 PRINT " ";SE$(I);" ";
  358. 4350 NEXT I
  359. 4360 PRINT TAB(79) " "
  360. 4370 LOCATE 10,1
  361. 4380 PRINT STRING$(79,"-")
  362. 4390 LOCATE 14,1
  363. 4400 FOR I = 1 TO 6
  364. 4410 PRINT TAB(70) " "
  365. 4420 NEXT I
  366. 4430 LOCATE 11,1
  367. 4440 PRINT "  ";Q$(C-1,1);" ENTERED AT ";Q$(C-1,3);
  368. 4450 PRINT TAB(33)"CONTACTS =";C;TAB(50)INT((FRE(0)/FR)+.5)"% MEM";
  369. 4460 PRINT TAB(63)"BAND: ";BA$;" METERS  "
  370. 4470 LOCATE 13,1
  371. 4480 PRINT TAB(70) " "
  372. 4490 LOCATE 13,1
  373. 4500 INPUT "  ENTER NEXT CALL: ",Q$(C,1)
  374. 4510 IF LEN(Q$(C,1)) < 2 AND Q$(C,1) < "A" THEN GOTO 4470
  375. 4520 IF LEN(Q$(C,1)) < 12 THEN GOTO 4550
  376. 4530 PRINT:PRINT "  CALLSIGN TOO LONG, TRY AGAIN"
  377. 4540 GOTO 4430
  378. 4550 GOSUB 1020
  379. 4560 IF Q$(C,1)="DELE" OR Q$(C,1)="D" THEN GOTO 1630
  380. 4570 IF Q$(C,1)="PICK" OR Q$(C,1)="P" THEN GOTO 3130
  381. 4580 IF Q$(C,1)="SAVE" OR Q$(C,1)="SA" THEN GOSUB 1450:GOTO 4390
  382. 4590 IF Q$(C,1)="SORT" OR Q$(C,1)="SO" THEN GOTO 2400
  383. 4600 IF Q$(C,1)="VIEW" OR Q$(C,1)="V" THEN GOTO 2650
  384. 4610 IF Q$(C,1)="QUIT" OR Q$(C,1)="Q" THEN GOTO 4980
  385. 4620 IF VAL(Q$(C,1)) <= 9 THEN GOTO 4760     'TEST FOR BAND CHANGE
  386. 4630 REM *** BAND CHANGE ROUTINE ***
  387. 4640 IF Q$(C,1)="10" THEN BA$ ="10": GOTO 4430
  388. 4650 IF Q$(C,1)="15" THEN BA$="15": GOTO 4430
  389. 4660 IF Q$(C,1)="20" THEN BA$="20": GOTO 4430
  390. 4670 IF Q$(C,1)="30" THEN BA$="30": GOTO 4430
  391. 4680 IF Q$(C,1)="40" THEN BA$="40": GOTO 4430
  392. 4690 IF Q$(C,1)="80" THEN BA$="80": GOTO 4430
  393. 4700 IF Q$(C,1)="160" THEN BA$="160": GOTO 4430
  394. 4710 PRINT "  ";Q$(C,1);" IS NOT A BAND -- ENTER AS CALL? (Y/N) ";
  395. 4720 AN$ = INPUT$(1):PRINT AN$
  396. 4730 IF AN$="N" OR AN$="n" THEN GOTO 4390
  397. 4740 IF AN$<>"Y" AND AN$<>"y" THEN GOTO 4710
  398. 4750 Q$(C+1,7)=Q$(C,7)
  399. 4760 PRINT:PRINT "  . . . Looking"TAB(40):PRINT:PRINT
  400. 4770 FOR J=0 TO (C-1)
  401. 4780 IF SA$ = "S" THEN GOTO 4800
  402. 4790 IF Q$(J,1) <> Q$(C,1) THEN GOTO 4850 ELSE GOTO 4810
  403. 4800 IF Q$(J,7)+Q$(J,1)<>BA$+Q$(C,1) THEN GOTO 4850
  404. 4810 PRINT " ","DUPE ON "Q$(J,7);" METERS AT ";Q$(J,3);", ";Q$(J,2)
  405. 4820 PRINT:PRINT "  PRESS ANY KEY TO CONTINUE"
  406. 4830 X$=INPUT$(1)
  407. 4840 GOTO 4390
  408. 4850 NEXT J
  409. 4860 LOCATE 18,3:PRINT TAB(55):LOCATE 18,3
  410. 4870 PRINT "NO DUPE FOUND. ENTER CALL IN FILE? (RETURN/Y/N) ";
  411. 4880 AN$ = INPUT$(1):PRINT AN$
  412. 4890 IF AN$="N" OR AN$="n" THEN GOTO 4390
  413. 4900 IF AN$<>"Y" AND AN$<>"y" AND AN$<>CHR$(13) THEN GOTO 4860
  414. 4910 SF=0                    'SECTION FLAG
  415. 4920 GOSUB 1100
  416. 4930 C = C+1                 'ADVANCE COUNTER
  417. 4940 IF INT(C/10)<>C/10 THEN GOTO 4960
  418. 4950 IF SV$="Y" THEN GOSUB 1480
  419. 4960 IF SF=0 THEN GOTO 4390
  420. 4970 GOTO 4300
  421. 4980 REM *** QUIT/SAVE ROUTINE ***
  422. 4990 CLS:PRINT:PRINT:PRINT:PRINT:PRINT
  423. 5000 PRINT " ","      *** WARNING  WARNING  WARNING ***":PRINT:PRINT
  424. 5010 PRINT:PRINT " ","   IF NOT SAVED, DATA MAY BE LOST FOREVER!":PRINT
  425. 5020 PRINT:PRINT:PRINT "  DO YOU WANT TO SAVE THE CALLS? (Y/N) ";
  426. 5030 AN$ = INPUT$(1):PRINT AN$
  427. 5040 IF AN$="N" OR AN$="n" THEN GOTO 5070
  428. 5050 IF AN$<>"Y" AND AN$<>"y" THEN GOTO 5020
  429. 5060 GOSUB 1450
  430. 5070 PRINT:PRINT "  DO YOU WANT TO CONTINUE? (Y/N) ";
  431. 5080 AN$ = INPUT$(1):PRINT AN$
  432. 5090 IF AN$="N" OR AN$="n" THEN GOTO 5120
  433. 5100 IF AN$<>"Y" AND AN$<>"y" THEN GOTO 5070
  434. 5110 GOTO 4250
  435. 5120 PRINT:PRINT:PRINT:PRINT " "," ","HAPPY DX-ING":PRINT:PRINT
  436. 5130 KEY ON                      'RESTORE SCREEN
  437. 5140 REM *** SECTION DATA ***
  438. 5150 DATA "AB ","AK ","AL ","AR ","AZ ","BC ","CO ","CT ","DE ","EB "
  439. 5160 DATA "EMA","ENY","EPA","GA ","IA ","ID ","IL ","IN ","KS ","KY "
  440. 5170 DATA "LA ","LAX","MAR","MB ","MDC","ME ","MI ","MN ","MO ","MS "
  441. 5180 DATA "MT ","NC ","ND ","NE ","NFL","NH ","NLI","NM ","NNJ","NTX"
  442. 5190 DATA "NV ","OD ","OH ","ON ","OR ","ORG","PAC","PQ ","RI ","SB "
  443. 5200 DATA "SC ","SCV","SD ","SDG","SF ","SFL","SJV","SK ","SNJ","STX"
  444. 5210 DATA "SV ","TN ","UT ","VA ","VT ","WA ","WI ","WIN","WMA","WNY"
  445. 5220 DATA "WPA","WV ","WY ","YNT"
  446. 5230 END
  447.  
  448.                                                           
  449.